#include <stdio.h>
#include <stdlib.h>
#include <Windows.h>
#define InitSize 10

typedef struct
{
    int *data;
    int Maxsize;
    int length;
} SqList;

// 初始化线性表
void InitList(SqList &L)
{
    L.data = (int *)malloc(InitSize * sizeof(int));
    L.length = 0;
    L.Maxsize = InitSize;
}

void IncreaseList(SqList &L, int len)
{
    int *p = L.data;
    L.data = (int *)malloc((L.Maxsize + len) * sizeof(int));
    for (int i = 0; i < L.length; i++)
    {
        L.data[i] = p[i];
    }
    L.Maxsize = L.Maxsize + len;
    free(p);
}

bool InsertList(SqList &L, int i, int e)
{
    if (i < 1 || i > L.length + 1)
    {
        return false;
    }
    if (L.length >= L.Maxsize)
    {
        IncreaseList(L, InitSize);
    }
    for (int j = L.length; j >= i; j--)
    {
        L.data[j] = L.data[j - 1]; // 所有元素向后移动，并且空出一个位置
    }
    L.data[i - 1] = e; // 将空出的位置赋值为e
    L.length++;
    return true;
}

int GetElem(SqList &L, int i)
{
    return L.data[i - 1];
}

int main()
{
    SetConsoleOutputCP(65001);
    SqList L;
    InitList(L);
    InsertList(L, 1, 1);
    InsertList(L, 2, 2);
    InsertList(L, 3, 3);
    for (int i = 0; i < L.length; i++)
    {
        printf("%d ", L.data[i]);
    }
    printf("\n");
    GetElem(L, 2);
    printf("%d", GetElem(L, 2));
    return 0;
}